#ifndef _CAMERA_TEST_H_
#define _CAMERA_TEST_H_

#include "sw_type.h"
#include "ipz_zbc_includes.h"

/* 曲线测试特殊模式控制 */
typedef struct{
	SW_BOOL ConfigState_lock;			// 锁定配置状态
	SW_BOOL CheckState_InfCenter;		// 图纸是否Inf位置对中 确认
	SW_BOOL CheckState_AFEffect;		// AF效果 确认
	SW_BOOL AutoTest_ZmReDirFocusDiff;	// 自动测试 ZOOM空回
	SW_BOOL AotoTest_FsReDirFocusDiff;	// 自动测试 FOCUS空回
	SW_BOOL ManualAdjustFocusMode;		// 手动调整聚焦模式，TRUE 用户手动发命令调整，FALSE 默认AF手动聚焦模式
}CURVE_TEST_CONFIG;
extern CURVE_TEST_CONFIG CurveTestConfig;


/* 曲线坐标 zoom-focus */
typedef struct LenCurveCoord
{
    SW_INT32 ZmPos;
    SW_INT32 FsPos;
}LenCurveCoord;

/* PI 偏移量 */
typedef struct LenPIOffset
{
    SW_INT32 ZmPIOffset;
    SW_INT32 FsPIOffset;
}LenPIOffset;

/* 曲线物距 */
typedef enum
{
    CURVE_INF = 0,		// INF物距
    CURVE_1000M,		// 1000M物距
    CURVE_500M,			// 200M物距
    CURVE_100M,			// 100M物距
    CURVE_50M,			// 50M物距
    CURVE_20M,			// 20M物距
    CURVE_10M,			// 10M物距
    CURVE_6M,			// 6M物距
    CURVE_3M,			// 3M物距
    CURVE_1M5			// 1M5物距
}CURVE_DIST;

/* 镜头一条曲线测试数据结构体，定义所需数据的相关变量 */
typedef struct
{
	SW_INT32 CurveVersion;		   // 曲线版本号
	
	SW_INT16 TestNum;              // 曲线测试点数
	SW_INT16 FitAllNum;			   // 要拟合的所有点的数量
	
	SW_INT16 *CurveTestIndex;	   // 参考点的zoom坐标(少点6个，多点不限<100)
	SW_INT16 *CurveTableIndex;	   // 要拟合的所有zoom坐标数组(定义此表需与App下Zoom分段表完全一样)
	
	SW_INT16 *PICalPosTable;        // 曲线 PI 偏差计算点位: 固定指定为两个计算点位，不需要PI校正的镜头配置NULL
	SW_INT16 MaxPiDiffLimit;        // 最大ZOOM PI偏差限制，默认200, 个别镜头特殊要求限制
	SW_INT16 IrisSectionNum;        // 光圈分段数，不需要的镜头配置0
	SW_INT16 *IrisConfigTable;      // 光圈曲线联动参数表，不需要的镜头配置NULL 
	
	SW_INT16 *CurveTableInfVal;		// 实际的理论inf曲线表
	SW_INT16 *CurveTable1000MVal;	// ...
	SW_INT16 *CurveTable500MVal;	// ...
	SW_INT16 *CurveTable100MVal;	// ...
	SW_INT16 *CurveTable50MVal;		// ...
	SW_INT16 *CurveTable20MVal;		// ...
	SW_INT16 *CurveTable10MVal;		// ...
	SW_INT16 *CurveTable06MVal;		// 实际的理论6M曲线表
	SW_INT16 *CurveTable03MVal;		// 实际的理论3M曲线表
	SW_INT16 *CurveTable1M5Val;		// 实际的理论微距(默认1M5)曲线表
	
//	SW_INT16 *Curve1M5Comp;			// 1M5 曲线的补偿
//	SW_INT16 *CurveInfComp;			// Inf 曲线的补偿

	SW_INT16 *CurveUpperLimit;		//白天曲线上偏
	SW_INT16 *CurveLowerLimit;		//白天曲线上偏

	SW_INT16 *CurveIRUpperLimit;	//夜晚曲线上偏
	SW_INT16 *CurveIRLowerLimit;	//夜晚曲线下偏
	
	SW_INT16 FollowINFDif;          //其它物距是否沿用INF曲线的拟合偏差
	
}LENS_ONE_CURVE_PARAM; 
extern LENS_ONE_CURVE_PARAM *pLensOneCurveParam;

extern LENS_ONE_CURVE_PARAM LensOneCurveParamLENS_T5719;
extern LENS_ONE_CURVE_PARAM LensOneCurveParamLENS_F162;


/* 曲线测试初始化 */
SW_INT32 CurveParamInit(void);
SW_INT32  CurveParamCheck(void);

SW_INT16 CalcArrayInsertValue(SW_INT32 indexNum, const SW_INT16* curveTableVal);


/* INF 一条曲线测试接口: 多点+少点  autotest 是否自动化测试，自动确认Y*/
SW_INT32 LensInfCurveTest(void);
SW_INT32 LensInfCurveInit(void);

SW_UINT LensInfPITest(void);

#endif

